package B2;

/**
 * 控制面板状态机测试类
 * 模拟密码输入、错误重试、锁定、解锁全流程
 */
public class ControlPanelStateMachineTest {
    public static void main(String[] args) throws InterruptedException {
        // 初始化状态机，预设正确密码为「4321」
        ControlPanelStateMachine panel = new ControlPanelStateMachine();
        String correctPwd = "4321";

        // 测试场景1：初始状态（读取输入）
        System.out.println("=== 测试场景1：初始状态 ===");
        System.out.println("当前状态：" + panel.getCurrentState());

        // 测试场景2：输入错误密码（第1次）
        System.out.println("\n=== 测试场景2：输入错误密码（1234）===");
        panel.processPassword("1234", correctPwd);

        // 测试场景3：输入错误密码（第2次）
        System.out.println("\n=== 测试场景3：输入错误密码（5678）===");
        panel.processPassword("5678", correctPwd);

        // 测试场景4：输入错误密码（第3次，触发锁定）
        System.out.println("\n=== 测试场景4：输入错误密码（9090）===");
        panel.processPassword("9090", correctPwd);

        // 测试场景5：锁定状态下尝试输入（拒绝处理）
        System.out.println("\n=== 测试场景5：锁定状态下输入密码 ===");
        panel.processPassword("4321", correctPwd);

        // 模拟等待120秒（实际测试可缩短为5秒，修改LOCK_DURATION=5000）
        System.out.println("\n=== 等待120秒解锁... ===");
        Thread.sleep(120000); // 若测试耗时太长，可改为5000（5秒）

        // 测试场景6：解锁后输入正确密码
        System.out.println("\n=== 测试场景6：解锁后输入正确密码（4321）===");
        panel.processPassword("4321", correctPwd);

        // 释放计时器资源
        panel.cancelTimer();
    }
}